package Componentes;

import javax.swing.ImageIcon;

import Graficos.ComponenteGrafico;
/**
 * ProyectoX TDP 2011
 * @author  Ma Gimena Ramos- LU:82716
 * @autor Brenda Dilschneider- LU: 92774
 *
 */
public class HongoVerde extends Power_Up implements Runnable {

	private int controlPos;
	private Thread hilo;
private int sentido;

/**
 * constructor		
 */
	public HongoVerde(){
			super();
			controlPos=0;	
			visible=false;
			hilo= new Thread(this);
			transitable=true;
			sentido=1;}


	/**
	 * metodo que devuelve un clon de tipo HongoVerde
	 */
	public Object clonar()
	{
		HongoVerde v = new HongoVerde();

	ComponenteGrafico c=  new ComponenteGrafico(null);
		
		v.setGrafico(c);
		
		return v;
	}
	
	/**
	 * aumenta una vida al mario
	 */
		@Override
		public void chocarMario() {
			if (visible){
			if (!destruido)
				{mario.obtenerPartida().aumentarPuntaje(100);
				mario.obtenerPartida().aumentarVida();
				destruirHilo();}
				
			}
			}
		
		/**
		 * asigna el grafico al objeto y arranca el hilo
		 */
		@Override
	public void arrancarHilo(){
		
			this.comp.setIcon(new ImageIcon(getClass().getClassLoader().getResource("Dibujos/1up.gif")));
					hilo.start();
		
	}
		/**
		 * el hongo se mueve por el nivel controlando si choca con mario
		 */
		@Override
		public void run() {
			
			{ 
				while( true ) {
					if (sentido==1){
				this.comp.setLocation(this.comp.getLocation().x+1, this.comp.getLocation().y);
			controlPos+=1;
			
			if (controlPos==16)
				{controlPos=0;
			     this.setPosicion(this.obtenerPosicion().getX()+1,this.obtenerPosicion().getY());
			     if (mario.estachiquito())
			     {if (this.obtenerPosicion().getX()== mario.obtenerPartida().obtenerPosicionActual().getX() && this.obtenerPosicion().getY()== mario.obtenerPartida().obtenerPosicionActual().getY())
			    	 chocarMario();}
			   else
			   {if (this.obtenerPosicion().getX()== mario.obtenerPartida().obtenerPosicionActual().getX() && this.obtenerPosicion().getY()== mario.obtenerPartida().obtenerPosicionActual().getY()+1)
			    	 chocarMario();}
			     try {
					hilo.sleep(400);
					
					
					
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
				gravedad.Caida(this);
				}
					}
		
			else{//va hacia la izquierda
				this.comp.setLocation(this.comp.getLocation().x-1, this.comp.getLocation().y);
				controlPos+=1;
		if (controlPos==16)
			{controlPos=0;
		     this.setPosicion(this.obtenerPosicion().getX()-1,this.obtenerPosicion().getY());
		   if (mario.estachiquito())
		     {if (this.obtenerPosicion().getX()== mario.obtenerPartida().obtenerPosicionActual().getX() && this.obtenerPosicion().getY()== mario.obtenerPartida().obtenerPosicionActual().getY())
		    	 chocarMario();}
		   else
		   {if (this.obtenerPosicion().getX()== mario.obtenerPartida().obtenerPosicionActual().getX() && this.obtenerPosicion().getY()== mario.obtenerPartida().obtenerPosicionActual().getY()+1)
		    	 chocarMario();}
		    
			Componente c1= mario.obtenerPartida().getComponente(this.obtenerPosicion().getX()-1,this.obtenerPosicion().getY())	;
			if (c1!=null)
				c1.serChocado(this);
			    try {
				hilo.sleep(400);				
			
			} catch (InterruptedException e) {
				
				e.printStackTrace();
			}
			
			gravedad.Caida(this);
			}
				if (this.obtenerPosicion().getX()==0)
					destruirHilo();
			}
				
			}
		}}

/**
 * llama al metodo chocarMario
 */
		@Override
		public void pisadoPorMario() {
		chocarMario();
			
		}

/**
 * destruye el hilo del objeto
 */
		@Override
		public void destruirHilo() {
			this.comp.setIcon(null);
			destruido=true;
			hilo.stop();
		}


		/**
		 * cambia el sentido en el cual se movia
		 */
		@Override
		public void serChocado() {
			if (sentido==1)	
				sentido=2;
				else
					sentido=1;
			
		}

/**
 * metodo redefinido no utilizado
 */
		@Override
		public void serChocado(Componente c) {
		
		}



}
